home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1999 March / EnigmA AMIGA RUN 35 (1999)(G.R. Edizioni)(IT)[!][issue 1999-03].iso / earcd / devel / wild / support / table_pytree.bas < prev    next >
BASIC Source File  |  1999-01-01  |  2KB  |  82 lines

  1. WINDOW 1,"PyTree table maker"
  2. DEFLNG a-Z
  3.  
  4. CONST SIZE&=3000
  5. DIM Quad(SIZE&),Disp(SIZE&),Displace(SIZE&),Remain(SIZE&),JumpTo(SIZE&)
  6.  
  7. Initial=    23160
  8. FirstDisplace=    11580
  9. Quad(0)=Initial^2
  10. Disp(0)=Initial*2+1
  11. Displace(0)=FirstDisplace
  12. Remain(0)=SIZE&-1
  13. MinRange=999999
  14. MaxRange=0
  15. PRINT "Calcing..."
  16. FOR i=0 TO SIZE&-1
  17.  IF INT(i/5000)=i/5000 THEN PRINT 
  18.  IF INT(i/1000)=i/1000 THEN PRINT i,
  19.  IF Quad(i)<>0
  20.   MajorSpace=INT(Remain(i)/2)
  21.   MinorSpace=Remain(i)-MajorSpace
  22.   MinorStart=i+1
  23.   MajorStart=MinorStart+MinorSpace
  24.   JumpTo(i)=MajorStart
  25.   CurBase=INT((Disp(i)-1)/2)
  26.   IF MinorSpace<=0 THEN Remain(i)=-1
  27. '  PRINT "       ","n","base","rem","jump/disp"
  28. '  PRINT "Curr:  ",i,CurBase,Remain(i),JumpTo(i);MinorSpace
  29.   IF Quad(MinorStart)=0 AND MinorSpace>0
  30.    MinorBase=CurBase-Displace(i)
  31.    IF MinorBase<MinRange THEN MinRange=MinorBase
  32.    Quad(MinorStart)=MinorBase^2
  33.    Disp(MinorStart)=MinorBase*2+1
  34.    Displace(MinorStart)=INT(Displace(i)/2)
  35.    Remain(MinorStart)=MinorSpace-1
  36. '   PRINT "Minor: ",MinorStart,MinorBase,Remain(MinorStart),Disp(MinorStart)
  37.   END IF
  38.   IF Quad(MajorStart)=0 AND MajorSpace>0
  39.    MajorBase=CurBase+Displace(i)
  40.    IF MajorBase>MaxRange THEN MaxRange=MajorBase
  41.    Quad(MajorStart)=MajorBase^2
  42.    Disp(MajorStart)=MajorBase*2+1
  43.    Displace(MajorStart)=INT(Displace(i)/2)
  44.    Remain(MajorStart)=MajorSpace-1
  45. '   PRINT "Major: ",MajorStart,MajorBase,Remain(MajorStart),Disp(MajorStart)
  46.   END IF
  47.  END IF
  48. NEXT i
  49.  
  50. OPEN "ram:PyTree.table" FOR OUTPUT AS 1
  51. PRINT
  52. PRINT "Table range: min =";MinRange,"max =";MaxRange
  53. PRINT "        $^2: min=$";HEX$(MinRange^2),"max=$";HEX$(MaxRange^2)
  54. PRINT
  55. PRINT "Writing..."
  56.  
  57. FOR i=0 TO SIZE&-1
  58.  IF INT(i/5000)=i/5000 THEN PRINT 
  59.  IF INT(i/1000)=i/1000 THEN PRINT i,
  60.  ju=JumpTo(i)-i
  61.  juofs=ju*12-4
  62.  IF Remain(i)=-1 THEN juofs=-1                ' indicated the end of a descending tree.
  63.  PRINT #1,MKL$(Quad(i));MKL$(juofs);MKL$(Disp(i));
  64. NEXT i
  65. CLOSE 1
  66.  
  67.  
  68.  
  69.  
  70.   
  71.   
  72.   
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.